home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / UTIL / SYS / ABODE120 / !Abode / Source (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-08-23  |  18KB  |  831 lines

  1.  ><Abode$Dir>.Source
  2.  This application is FreeWare. (c) 1992,1993,1994 Dick Alstein
  3. Appl$="Abode"
  4. Version$="1.20 (23-Aug-94)"
  5. error
  6. quit%=
  7.     .mask%=(1<<4)+(1<<5)+(1<<7)+(1<<11)+(1<<12)
  8.  "OS_ReadMonotonicTime" 
  9.  blinktime%
  10. F  blinktime%=(blinktime%+blinkperiod%)-(blinktime% 
  11.  blinkperiod%)
  12.  "Wimp_PollIdle",mask%,blk%,blinktime% 
  13.  reason%
  14.  reason% 
  15.       
  16. blinkcaret
  17. +      
  18.  "OS_ReadMonotonicTime" 
  19.  time%
  20.       
  21.  time%>rmamintime% 
  22. B        
  23.  minimizerma% 
  24.  "XOS_ChangeDynamicArea",1,-(1<<24)
  25. !        rmamintime%=time%+100
  26.       
  27. )    
  28.  2 : 
  29.  "XWimp_OpenWindow",,blk%
  30. )    
  31.  3 : 
  32.  "Wimp_CloseWindow",,blk%
  33. ?    
  34.  6 : 
  35. mouseclick(blk%!0,blk%!4,blk%!8,blk%!12,blk%!16)
  36. )    
  37.  8 : 
  38. key(blk%!0,blk%!4,blk%!24)
  39.  9 : 
  40. menuselect(blk%)
  41. 1    
  42.  17,18 : 
  43. receive(blk%!4,blk%!8,blk%!16)
  44.  quit%
  45. msg_exit
  46.  "Wimp_CloseDown"
  47. access(name$,type%)
  48.  ofs%,read%,item$,itemtype%,i%,N$
  49.  "OS_File",5,name$ 
  50.  ,,,,,attr%
  51.  type%=2 
  52. &+  attr%=(attr% 
  53.  &F7) 
  54.  (access% 
  55.  &08)
  56. (#  attr%=(attr% 
  57.  &C4) 
  58.  access%
  59.  dontlocksetup% 
  60. *$    N$=
  61. upcase(
  62. leafname(name$))
  63. +     
  64. msg_lookup0(N$)<>"" 
  65.       attr%=attr% 
  66. -        
  67.  "XOS_File",4,name$,,,,attr% 
  68.  ;flg%
  69.  (flg% 
  70. complain(
  71. msg_lookup1("NoAccess",name$))
  72.  type%=2 
  73.     ofs%=0
  74. 6        
  75. 7B      
  76.  "OS_GBPB",10,name$,blk%,1,ofs%,40,"*" 
  77.  ,,,read%,ofs%
  78.       
  79.  read% 
  80.         itemtype%=blk%!16
  81. :)        item$=name$+"."+
  82. str(blk%+20)
  83. ;$        
  84. access(item$,itemtype%)
  85.       
  86. =     
  87.  (read%=0) 
  88.  (flg% 
  89. basicload(file$)
  90.  dodir% 
  91.  "Wimp_StartTask","Dir "+
  92. dirname(file$)
  93.  "XOS_Module",18,"ARMBasicEditor" 
  94.  ;flg%
  95.  ((flg% 
  96.  1)=0) 
  97.  -1) 
  98. insertcmd("EDIT")
  99. insertcmd("MODE MODE")
  100.  "Wimp_StartTask","Basic -load "+file$
  101. blinkcaret
  102.  blink% 
  103.  "Wimp_GetCaretPosition",,ct%
  104.  (ct%!0<>-1) 
  105.  (ct%!16<>-1) 
  106.     ct%!16=(ct%!16)
  107. (1<<25)
  108. TI    
  109.  "Wimp_SetCaretPosition",ct%!0,ct%!4,ct%!8,ct%!12,ct%!16,ct%!20
  110. complain(text$)
  111.  dummy%
  112. dummy%=
  113. errbox(text$,17)
  114. defaultstatus
  115. mode%=1
  116. access%=&03
  117. dodir%=
  118. confirm%=
  119. blink%=
  120. newtype$="Text"
  121. cmd$=""
  122. dontlocksetup%=
  123. pullfront%=
  124. pullfrontkey%=&1EA
  125. blinkperiod%=25
  126. minimizerma%=
  127. taskwindow%=
  128. dirname(F$)
  129.  p%,q%
  130. F$,".",p%)
  131.  q% > 0 
  132.  p%=q%+1
  133.  q%=0
  134. F$,p%-2)
  135. errbox(err$,boxes%)
  136. errblk%!0=0
  137. $(errblk%+4)=err$+
  138.  "Wimp_ReportError",errblk%,boxes%,Appl$ 
  139.  ,click%
  140. =(click%=1)
  141. error
  142.  "Wimp_CloseDown" : 
  143. errbox(
  144. $+" (line "+
  145. )+")",3) 
  146.  "Wimp_CloseDown"
  147.  flg%
  148.  errblk% &100
  149.  "Wimp_Initialise",200,&4B534154,Appl$ 
  150.  osversion%,thistask%
  151. error
  152.  blk% &400
  153. indsize%=&400
  154.  indir% indsize%
  155. indirend%=indir%+indsize%
  156.  ptrinfo% 20
  157.  varbuf% 256
  158. newtype$="Text"
  159.  emptystr% 4
  160. $emptystr%=""
  161.  ct% 24
  162.  accessbit%(4)
  163. accessbit%(0)=&08
  164. accessbit%(1)=&01
  165. accessbit%(2)=&02
  166. accessbit%(3)=&10
  167. accessbit%(4)=&20
  168. msg_init
  169.  "OS_ReadMonotonicTime" 
  170.  rmamintime%
  171. readscreenvars
  172. loadstatus
  173. %spfilename$="<Abode$Dir>.Sprites"
  174.  "OS_ReadModeVariable",27,0 
  175.  ;flg% : 
  176.  test if hires modes available
  177.  (flg% 
  178.  2)=0 
  179.   spfilename$+="22"
  180.  "OS_File",17,spfilename$ 
  181.  ,,,,spsize%
  182. spsize%+=16
  183.  sparea% spsize%
  184. sparea%!0=spsize%
  185. sparea%!8=16
  186.  "OS_SpriteOp",256+9,sparea%
  187.  "OS_SpriteOp",256+10,sparea%,spfilename$
  188.  spname% 14
  189. $spname%="abode_"+
  190. (mode%)
  191.  mode%=4 
  192.  (access% 
  193.  accessbit%(0)) 
  194.     $spname%+="b"
  195.     $spname%+="a"
  196. blk%!0=-1
  197. blk%!4=0 : blk%!8=0
  198. blk%!12=68 : blk%!16=68
  199. blk%!20=&7000311A
  200. blk%!24=spname%
  201. blk%!28=sparea%
  202. blk%!32=12
  203.  "Wimp_CreateIcon",,blk% 
  204.  baricon%
  205.  "Wimp_OpenTemplate",,"<Abode$Dir>.Templates"
  206. *infowin%=
  207. loadtemplate("Info",sparea%)
  208. !$(blk%!(92+32*3+20))=Version$
  209. .accesswin%=
  210. loadtemplate("Access",sparea%)
  211. ,optwin%=
  212. loadtemplate("Options",sparea%)
  213. 'pullfrontkeystr%=blk%!(92+32*11+20)
  214. 1grabkeywin%=
  215. loadtemplate("GrabKeys",sparea%)
  216.  "Wimp_CloseTemplate"
  217.  I%=0 
  218. selecticon(accesswin%,I%,(access% 
  219.  accessbit%(I%)))
  220. selecticon(optwin%,1,dodir%)
  221. selecticon(optwin%,2,dontlocksetup%)
  222. selecticon(optwin%,3,confirm%)
  223. selecticon(optwin%,4,blink%)
  224. selecticon(optwin%,5,pullfront%)
  225. selecticon(optwin%,6,minimizerma%)
  226. shadeicon(optwin%,8,
  227.  blink%)
  228. shadeicon(optwin%,9,
  229.  blink%)
  230. selecticon(optwin%,14,taskwindow%)
  231. :blk%!0=grabkeywin% : 
  232.  open grabkeys window off-screen
  233.  "Wimp_GetWindowState",,blk%
  234. blk%!4=(blk%!4)-10000
  235. blk%!8=(blk%!8)-10000
  236. blk%!12=(blk%!12)-10000
  237. blk%!16=(blk%!16)-10000
  238. blk%!28=-1
  239.  "Wimp_OpenWindow",,blk%
  240. preparemenus
  241. insertcmd(s$)
  242.  i%=1 
  243.  "OS_Byte",138,0,
  244. s$,i%,1))
  245.  "OS_Byte",138,0,13
  246. key(window%,icon%,key%)
  247.  val%,ok%
  248.  (window%=optwin%) 
  249.  (icon%=11) 
  250.   val%=0
  251. validhotkey(key%) 
  252. -    $(pullfrontkeystr%)=
  253. hotkeyname(key%)
  254. !    
  255. selecticon(optwin%,11,0)
  256. I    
  257.  "Wimp_SetCaretPosition",optwin%,11,,,-1,
  258. ($(pullfrontkeystr%))
  259.     pullfrontkey%=key%
  260.  (key%=27) 
  261.  (key%=13) 
  262. 6    $(pullfrontkeystr%)=
  263. hotkeyname(pullfrontkey%)
  264. !    
  265. selecticon(optwin%,11,0)
  266. I    
  267.  "Wimp_SetCaretPosition",optwin%,11,,,-1,
  268. ($(pullfrontkeystr%))
  269.  pullfront% 
  270.  (key%=pullfrontkey%) 
  271. *    
  272.  "Wimp_GetPointerInfo",,ptrinfo%
  273.  (ptrinfo%!12)>=0 
  274.       blk%!0=ptrinfo%!12
  275. (      
  276.  "Wimp_GetWindowState",,blk%
  277. !      
  278.  ((blk%!32)
  279. (1<<17)) 
  280.         blk%!28=-2
  281.       
  282.         blk%!28=-1
  283.       
  284. -      
  285.  "Wimp_SendMessage",2,blk%,blk%!0
  286.         
  287. !    
  288.  "Wimp_ProcessKey",key%
  289. validhotkey(val%)
  290.     ok%=
  291.  (val% 
  292.  &F) 
  293.  1,2,3,4,5,6,7,8,9
  294.     ok%=(val%>=&181)
  295.  10,11,12
  296.     ok%=(val%>=&1CA)
  297. hotkeyname(val%)
  298.  name$
  299. name$=""
  300.  (val% 
  301.  &10) 
  302.  name$+=
  303. (139)
  304.  (val% 
  305.  &20) 
  306.  name$+="^"
  307. name$+="F"+
  308. (val% 
  309. =name$
  310. leafname(f$)
  311.  p%,q%
  312.   p%=q%+1
  313.   q%=
  314. f$,".",p%)
  315.  q%=0
  316. f$,p%)
  317. loadstatus
  318.  type$
  319.  ("<Abode$Dir>.Status")
  320.  F%=0 
  321. complain(
  322. msg_lookup0("NoStLoad"))
  323. defaultstatus
  324. #F%,mode%,access%,dodir%,confirm%,blink%,type$,cmd$
  325. #F%,dontlocksetup%,pullfront%,pullfrontkey%
  326. #F%,blinkperiod%,minimizerma%,taskwindow%
  327.  mode% < 1 
  328.  mode% > 5 
  329.     mode%=1
  330. (type$)>0) 
  331. (type$)<12) 
  332.     newtype$=type$
  333.     newtype$="Text"
  334. loadtemplate(name$,spptr%)
  335.  handle%,i%
  336.  "Wimp_CloseTemplate" : 
  337. error
  338.  "Wimp_LoadTemplate",,blk%+4,indir%,indirend%,-1,name$,0 
  339.  ,,indir%
  340. blk%!68=spptr%
  341.  blk%!88>0 
  342.  i%=0 
  343.  blk%!88
  344.     f%=blk%!(92+i%*32+16)
  345.  (f% 
  346.  &103)=&102 
  347. B#      blk%!(92+i%*32+24)=spptr%
  348. C        
  349.  "Wimp_CreateWindow",,blk%+4 
  350.  handle%
  351. =handle%
  352. msg_init
  353.  fname$,flags%,size%,buf%
  354. K!fname$="<Abode$Dir>.Messages"
  355.  "MessageTrans_FileInfo",,fname$ 
  356.  flags%,,size%
  357.  flags% 
  358.   buf%=0
  359.  buf% size%
  360.  MsgDesc% 17+
  361. (fname$)
  362. $(MsgDesc%+16)=fname$
  363.  "MessageTrans_OpenFile",MsgDesc%,MsgDesc%+16,buf%
  364. msg_exit
  365.  "MessageTrans_CloseFile",MsgDesc%
  366. MsgDesc%=0
  367. msg_lookup0(token$)
  368.  result%,flg%
  369.  "XMessageTrans_Lookup",MsgDesc%,token$,0 
  370.  ,,result%;flg%
  371.  (flg% 
  372. `      =""
  373. str(result%)
  374. msg_lookup1(token$,param$)
  375.  result%
  376.  "MessageTrans_Lookup",MsgDesc%,token$,blk%,&100,param$ 
  377.  ,,result%
  378. str(result%)
  379. mouseclick(xpos%,ypos%,button%,wndw%,icon%)
  380.  wndw% 
  381.  button% 
  382.       
  383.         
  384.  mode%=5 
  385.           
  386. setmode(1)
  387.         
  388.           
  389. setmode(mode%+1)
  390.         
  391.       
  392.         
  393. mainmenu(1)
  394.       
  395.         
  396.  mode% 
  397.           
  398. x'            
  399. insertcmd("MODE MODE")
  400. y+            
  401.  "Wimp_StartTask","Basic"
  402.           
  403. {1            access%=(access% 
  404.  accessbit%(0))
  405. |C            
  406. selecticon(accesswin%,0,(access% 
  407.  accessbit%(0)))
  408.             
  409. setmode(4)
  410.           
  411.             
  412. runcmd(cmd$)
  413.         
  414.         
  415.  accesswin%
  416. +    
  417. iconselected(accesswin%,icon%) 
  418. /      access%=access% 
  419.  (accessbit%(icon%))
  420.         
  421. 1      access%=access% 
  422.  accessbit%(icon%))
  423.         
  424. !    
  425.  (icon%=0) 
  426.  (mode%=4) 
  427.       
  428. setmode(mode%)
  429.         
  430.  optwin%
  431.  icon% 
  432.       
  433.  1 : dodir%=
  434.  dodir%
  435. /      
  436.  2 : dontlocksetup%=
  437.  dontlocksetup%
  438. #      
  439.  3 : confirm%=
  440.  confirm%
  441.       
  442.         blink%=
  443.  blink%
  444. +        
  445.  "Wimp_GetCaretPosition",,ct%
  446. <        
  447.  blink%)
  448. (ct%!16<>-1)
  449. ((ct%!16)
  450. (1<<25)>0) 
  451. *          ct%!16=(ct%!16) 
  452. (1<<25))
  453. O          
  454.  "Wimp_SetCaretPosition",ct%!0,ct%!4,ct%!8,ct%!12,ct%!16,ct%!20
  455.         
  456. *        
  457. shadeicon(optwin%,8,
  458.  blink%)
  459. *        
  460. shadeicon(optwin%,9,
  461.  blink%)
  462.       
  463. A        
  464.  ((button%=4)
  465. (icon%=9)) 
  466.  ((button%=1)
  467. (icon%=8)) 
  468. !          
  469.  blinkperiod%>16 
  470. #            
  471.  blinkperiod%>40 
  472. !              blinkperiod%-=2
  473.             
  474. !              blinkperiod%-=1
  475.             
  476.           
  477.         
  478. A        
  479.  ((button%=4)
  480. (icon%=8)) 
  481.  ((button%=1)
  482. (icon%=9)) 
  483. "          
  484.  blinkperiod%<100 
  485. #            
  486.  blinkperiod%<40 
  487. !              blinkperiod%+=1
  488.             
  489. !              blinkperiod%+=2
  490.             
  491.           
  492.         
  493. '      
  494.  5 : pullfront%=
  495.  pullfront%
  496. +      
  497.  6 : minimizerma%=
  498.  minimizerma%
  499.       
  500.         
  501. savestatus
  502.         blk%!0=optwin%
  503. '        
  504.  "Wimp_CloseWindow",,blk%
  505.       
  506.         blk%!0=optwin%
  507. '        
  508.  "Wimp_CloseWindow",,blk%
  509. *      
  510.  14 : taskwindow%=
  511.  taskwindow%
  512.         
  513. menuselect(selection%)
  514.  adjust%,selinfo%,itemnr%,item%,item$,parentitem%,p%,dx%,dy%
  515.  "MenuUtil_Decode",mainmenu%,selection% 
  516.  ,adjust%,selinfo%
  517. itemnr%=selinfo%!0
  518. item%=selinfo%!8
  519. item$=
  520. str(selinfo%!12)
  521. parentitem%=selinfo%!24
  522.  parentitem%=0 
  523.  item% 
  524. E    
  525.  item_mode1%,item_mode2%,item_mode3%,item_mode4%,item_mode5%
  526.       
  527. setmode(itemnr%)
  528.  item_options%
  529.       blk%!0=optwin%
  530. (      
  531.  "Wimp_GetWindowState",,blk%
  532. #      
  533.  (blk%!32 
  534.  (1<<16))=0 
  535. 9        
  536.  center window to screen if not already open
  537. 4        dx%=(screensize_x%-(blk%!12+blk%!4)) 
  538. 4        dy%=(screensize_y%-(blk%!16+blk%!8)) 
  539.       
  540.       blk%!4=blk%!4+dx%
  541.       blk%!8=blk%!8+dy%
  542.       blk%!12=blk%!12+dx%
  543.       blk%!16=blk%!16+dy%
  544.       blk%!28=-1
  545. $      
  546.  "Wimp_OpenWindow",,blk%
  547. K      
  548.  "Wimp_SetCaretPosition",optwin%,11,,,-1,
  549. ($(pullfrontkeystr%))
  550.  item_quit%
  551.       quit%=
  552.  parentitem% 
  553. &    
  554.  item_mode2%,item_othertypes%
  555. !      
  556.  item%=item_rebuild% 
  557.         
  558. typemenu
  559.       
  560.         newtype$=item$
  561. (        
  562.  "MenuUtil_TickOnly",item%
  563. ,        
  564.  parentitem%=item_othertypes% 
  565. 0          
  566.  "MenuUtil_TickOnly",parentitem%
  567.         
  568. /          
  569.  "MenuUtil_Tick",typesubmenu%,0
  570.         
  571.       
  572.  item_mode3%
  573.       
  574.  confirm% 
  575. 5        
  576. errbox("Kill module "+item$+"?",&13) 
  577. 1          
  578.  "Wimp_StartTask","RMKill "+item$
  579. *          
  580.  "MenuUtil_Delete",item%,
  581.         
  582.       
  583. /        
  584.  "Wimp_StartTask","RMKill "+item$
  585. (        
  586.  "MenuUtil_Delete",item%,
  587.       
  588.  item_mode5%
  589.       cmd$=item$
  590.  adjust% 
  591. mainmenu(0)
  592. readscreenvars
  593.  xeig%,yeig%,xpixels%,ypixels%
  594.  "OS_ReadModeVariable",-1,4 
  595.  ,,xeig%
  596.  "OS_ReadModeVariable",-1,5 
  597.  ,,yeig%
  598.  "OS_ReadModeVariable",-1,11 
  599.  ,,xpixels%
  600.  "OS_ReadModeVariable",-1,12 
  601.  ,,ypixels%
  602. Escreensize_x%=(xpixels%+1)*(1<<xeig%) : 
  603.  screen size in OS units
  604. )screensize_y%=(ypixels%+1)*(1<<yeig%)
  605. receive(sender%,ref%,code%)
  606.  ack%
  607. ack%=0
  608.  sender% <> thistask% 
  609.  code% 
  610.  0 : quit%=
  611.       obj$=
  612. str(blk%+44)
  613.       objtype%=blk%!40
  614.       
  615.  mode% 
  616.         
  617.           
  618.  objtype%=&FFB 
  619.              
  620. basicload(obj$)
  621.             ack%=4
  622.           
  623.         
  624. 6          
  625.  (objtype% >= 0) 
  626.  (objtype% <= &FFF) 
  627. @            
  628.  "Wimp_StartTask","SetType "+obj$+" "+newtype$
  629.             ack%=4
  630.           
  631.         
  632. 5          
  633.  (objtype%=&1000) 
  634.  (objtype%=&2000) 
  635.             
  636. access(obj$,2)
  637.           
  638.             
  639. access(obj$,1)
  640.           
  641.           ack%=4
  642.         
  643. $          
  644. runcmd(cmd$+" "+obj$)
  645.           ack%=4
  646.       
  647.  &400C1
  648.       
  649. readscreenvars
  650.  ack%<>0 
  651.     blk%!0=20
  652.     blk%!12=ref%
  653.     blk%!16=ack%
  654. (-    
  655.  "Wimp_SendMessage",17,blk%,sender%
  656. runcmd(command$)
  657.  taskwindow% 
  658.  "Wimp_StartTask","TaskWindow -quit "+
  659. 34+command$+
  660.  "Wimp_StartTask",command$
  661. savestatus
  662.  ("<Abode$Dir>.Status")
  663.  F%=0 
  664. complain(
  665. msg_lookup0("NoStSave"))
  666. #F%,mode%,access%,dodir%,confirm%,blink%,newtype$,cmd$
  667. #F%,dontlocksetup%,pullfront%,pullfrontkey%
  668. #F%,blinkperiod%,minimizerma%,taskwindow%
  669. setmode(newmode%)
  670. mode%=newmode%
  671. C $(spname%)="abode_"+
  672. (mode%)
  673.  mode%=4 
  674.  (access% 
  675.  accessbit%(0)) 
  676.     $(spname%)+="b"
  677.     $(spname%)+="a"
  678. selecticon(-2,baricon%,0)
  679. str(s%)
  680.  i%,n$
  681.  s%?i% >= 32 : n$+=
  682. (s%?i%) : i%+=1 : 
  683. upcase(s$)
  684.  i%=1 
  685.   a%=
  686. s$,i%,1))
  687.  (a%>=97)
  688. (a%<=122) 
  689. s$,i%,1)=
  690. (a%-32)
  691. menu_add(text$,submenu%)
  692.  handle%
  693.  "MenuUtil_Add",,text$ 
  694.  handle%
  695.  submenu%<>-1 
  696.  "MenuUtil_SubMenu",handle%,submenu%
  697. =handle%
  698. menu_addwritable(maxlen%,validstr%)
  699.  handle%
  700.  "MenuUtil_Add",,"" 
  701.  handle%
  702.  "MenuUtil_Writable",,1,maxlen%,validstr%
  703. =handle%
  704. preparemenus
  705.  i%,p%,t$
  706.  "MenuUtil_Initialise",010,0
  707. typesubmenu%=0
  708.  "MenuUtil_New",,"Set type" 
  709.  typemenu%
  710.  "MessageTrans_EnumerateTokens",MsgDesc%,"TYPE*",blk%,256,i% 
  711.  ,,p%,,i%
  712.  p%<>0 
  713. s!    t$=
  714. msg_lookup0(
  715. str(p%))
  716.     dummy%=
  717. menu_add(t$,-1)
  718. u-    
  719.  t$=newtype$ 
  720.  "MenuUtil_Tick",,1
  721.  p%=0
  722. x*item_othertypes%=
  723. menu_add("Other",-1)
  724.  "MenuUtil_Dots",,1
  725. z.item_rebuild%=
  726. menu_add("Rebuild menu",-1)
  727. {7modmenu%=0 : 
  728.  modules submenu is built when opened
  729.  "MenuUtil_New",,"CLI command" 
  730.  cmdmenu%
  731. }2item_command%=
  732. menu_addwritable(256,emptystr%)
  733.  "MenuUtil_Text",item_command%,cmd$
  734.  "MenuUtil_New",,Appl$ 
  735.  mainmenu%
  736. )item_info%=
  737. menu_add("Info",infowin%)
  738.  "MenuUtil_Dots",,1
  739. *item_mode1%=
  740. menu_add("Basic edit",-1)
  741. /item_mode2%=
  742. menu_add("Set type",typemenu%)
  743. +item_mode3%=
  744. menu_add("Kill module",-1)
  745. .item_mode4%=
  746. menu_add("Access",accesswin%)
  747. -item_mode5%=
  748. menu_add("Command",cmdmenu%)
  749.  "MenuUtil_Dots",,1
  750. ,item_options%=
  751. menu_add("Options...",-1)
  752. #item_quit%=
  753. menu_add("Quit",-1)
  754. typemenu
  755. mainmenu(newmenu%)
  756. 2$(pullfrontkeystr%)=
  757. hotkeyname(pullfrontkey%)
  758.  "MenuUtil_TickOnly",mainmenu%,mode%
  759.  "MenuUtil_Text",,newtype$
  760.  newmenu% 
  761. modmenu
  762.  newmenu% 
  763.  "Wimp_GetPointerInfo",,ptrinfo%
  764.  "MenuUtil_Show",mainmenu%,ptrinfo%
  765.  "MenuUtil_Show",mainmenu%,0
  766. modmenu
  767.  item%
  768.  modmenu%<>0 
  769.  "MenuUtil_Delete",modmenu%,
  770.  "MenuUtil_New",,"RMKill" 
  771.  modmenu%
  772. modnr%=0
  773. inst%=0
  774. nrmods%=0
  775.  "XOS_Module",12,modnr%,inst% 
  776.  ,modnr%,inst%,base%;flg%
  777.  (flg% 
  778.  1)=0 
  779. !    modname%=base%+(base%!16)
  780.  modname% < &3000000 
  781. ,      item%=
  782. menu_add(
  783. str(modname%),-1)
  784.       nrmods%+=1
  785.         
  786.  ((flg% 
  787.  1)=1)
  788.  nrmods%=0 
  789.  "MenuUtil_SubMenu",item_mode3%,0
  790.  "MenuUtil_SubMenu",item_mode3%,modmenu%
  791. typemenu
  792.  item%
  793.  typesubmenu%<>0 
  794.  "MenuUtil_Delete",typesubmenu%,
  795.  "MenuUtil_New",,"Other types" 
  796.  typesubmenu%
  797. nameptr%=0
  798.  "XOS_ReadVarVal","File$Type_###",varbuf%,24,nameptr% 
  799.  ,,len%,nameptr%
  800.  len%>0 
  801.     varbuf%?len%=13
  802. &    item%=
  803. menu_add($(varbuf%),-1)
  804. 5    
  805.  $(varbuf%)=newtype$ 
  806.  "MenuUtil_Tick",,1
  807.  len%=0
  808. )item_newtype%=
  809. menu_addwritable(24,0)
  810.  "MenuUtil_SubMenu",item_othertypes%,typesubmenu%
  811. selecticon(window%,icon%,f%)
  812. blk%!0=window%
  813. blk%!4=icon%
  814.   blk%!8=1<<21
  815.   blk%!8=0
  816. blk%!12=1<<21
  817.  "Wimp_SetIconState",,blk%
  818. iconselected(window%,icon%)
  819. blk%!0=window%
  820. blk%!4=icon%
  821.  "Wimp_GetIconState",,blk%
  822. =((blk%!24) 
  823.  (1<<21)) > 0
  824. shadeicon(window%,icon%,f%)
  825. blk%!0=window%
  826. blk%!4=icon%
  827.   blk%!8=1<<22
  828.   blk%!8=0
  829. blk%!12=1<<22
  830.  "Wimp_SetIconState",,blk%
  831.